package com.company.ljh.easy;
/**
 * //将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
 * //
 * //
 * //
 * // 示例 1：
 * //
 * //
 * //输入：l1 = [1,2,4], l2 = [1,3,4]
 * //输出：[1,1,2,3,4,4]
 * //
 * //
 * // 示例 2：
 * //
 * //
 * //输入：l1 = [], l2 = []
 * //输出：[]
 * //
 * //
 * // 示例 3：
 * //
 * //
 * //输入：l1 = [], l2 = [0]
 * //输出：[0]
 * //
 * //
 * //
 * //
 * // 提示：
 * //
 * //
 * // 两个链表的节点数目范围是 [0, 50]
 * // -100 <= Node.val <= 100
 * // l1 和 l2 均按 非递减顺序 排列
 * //
 * // Related Topics 递归 链表
 * // 👍 2287 👎 0
 */

import com.company.ljh.utils.ListNode;

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.easy
 * @author:ljh
 * @createTime:2022/3/21 17:07
 * @version:1.0
 */
public class 合并两个有序链表 {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode head = null;
        ListNode startHead = null;
        ListNode head1 = list1;
        ListNode head2 = list2;

        while (head1 != null && head2 != null) {
            if (head1.val < head2.val) {
                if (head == null) {
                    head = head1;
                    startHead = head1;
                } else {
                    head.next = head1;
                    head = head.next;
                }
                head1 = head1.next;
            } else {
                if (head == null) {
                    head = head2;
                    startHead = head2;
                } else {
                    head.next = head2;
                    head = head.next;
                }
                head2 = head2.next;
            }
        }
        while (head1 == null && head2 != null) {
            if (head == null) {
                head = head2;
                startHead = head2;
            } else {
                head.next = head2;
                head = head.next;
            }
            head2 = head2.next;
        }
        while (head2 == null && head1 != null) {
            if (head == null) {
                head = head1;
                startHead = head1;
            } else {
                head.next = head1;
                head = head.next;
            }
            head1 = head1.next;
        }
        return startHead;
    }
}
